/**
 * 最好纯数字 或者 纯字符字符串 数字字符混搭可能会有意外
 * table 加上 class="ClickSort" 即可  第一列点击如想禁用，添加class="NoClick" 即可
 *
 * @constructor
 */

$(function(){
    clickSort = new ClickSort();
})

function ClickSort() {

}

//主方法
ClickSort.prototype.start = function () {
    //监听的table
    let table_On = $(".clickSort");

    //寻找第一行 获取所有th/td
    let tdArray_first = table_On.find("tr:eq(0)").children();

    //获取所有的行
    let trArray_all = table_On.find($("tr"));

    //监听第一列
    tdArray_first.on("click", function () {
        if ($(this).hasClass("NoClick")) {
            return;
        } else {
            //被点击的列序号
            let index = $(this).index();
            console.log("点击的序列:" + index);
            //正序 反序 控制
            let flag = clickSort.hasAttributes($(this), "data-click");

            let array = new Array();
            for (let i = 1; i < trArray_all.length; i++) {
                let td = $($(trArray_all[i]).children())[index];
                let text = $(td).text();
                let item = {};
                item.text = text;
                item.tr = $(td).parent();
                array.push(item);
            }
            array = clickSort.sortArray(array, flag);
            console.log(array);

            let tr_second = table_On.find($("tr:eq(1)"));
            let tr_parent = $(tr_second).parent();
            for (let i = table_On.find("tr").length; i > 0; i--) {
                $(table_On.find("tr")[i]).remove();
            }
            for (let i = 0; i < array.length; i++) {
                $(tr_parent).append((array[i].tr));
            }
        }
    })
}


//寻找此元素是否含有此元素 如果有则移除 没有则添加
ClickSort.prototype.hasAttributes = function (element, attrbutes) {
    let attr = element.attr(attrbutes);
    if ((typeof attr) != "undefined") {
        element.removeAttr(attrbutes);
        return true;
    }
    element.attr(attrbutes, "");
    return false;
}


ClickSort.prototype.sortArray = function (array, flag) {
    //根据数组第一个推断数组类型
    if (clickSort.isNumberArray(array)) {
        //数字
        console.log("推测为数字类型");
        if (flag) {
            return array.sort(function (a, b) {
                return a.text - b.text;
            });
        } else {
            return array.sort(function (a, b) {
                return b.text - a.text;
            })
        }
    } else {
        //字符串
        console.log("推测为字符串类型");
        if (flag) {
            return array.sort(function (a, b) {
                return a.text > b.text;
            });
        } else {
            return array.sort(function (a, b) {
                return a.text < b.text;
            });
        }
    }
}

//推测数组类型
ClickSort.prototype.isNumberArray = function (array) {
    for (let i = 0; i < array.length; i++) {
        if (!clickSort.isNumberForStr(array[i].text)) {
            return false;
        }
    }
    return true;
}

ClickSort.prototype.isNumberForStr = function (str) {
    if (str.length > 0 && !isNaN(Number(str))) {
        return true;
    }
    return false;
}


/*$(function () {
    let click = new ClickSort();
    click.start();
})*/
